/**
 * https://www.cnblogs.com/chaoyuehedy/p/9931146.html
 * axios封装
 * Axios 是一个基于 promise 的 HTTP 库，可以用在浏览器和 node.js 中。
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from 'axios';
import qs from 'qs';
import Cookies from 'js-cookie';

// 创建axios实例
const HTTP = axios.create({
  timeout: 1000 * 30,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
  }
})


/**
 * 请求拦截器
 */
axios.interceptors.request.use(config => {
  config.headers['token'] = Cookies.get('Token') || null;
  return config
}, error => {
  return Promise.reject(error)
})

/**
 * 响应拦截器
 */
axios.interceptors.response.use(response => {
  return response
}, error => {
  return Promise.reject(error)
});

/** 
 * get方法，对应get请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 * @param {Boolean} isProxy [是否没有使用代理] 
 */
HTTP.get = function (url, params, isNotProxy = false) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  });
}


/** 
 * post方法，对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 * @use http.post(url, params).then((response) => {}).catch((error) => {}).finally(() => {});
 */
HTTP.post = function (url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(params)).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  });
}

export default HTTP